<!DOCTYPE html>
<html>
    
<head>
    <meta charset="utf-8">
    
    <title>ApocalypseBlog</title>
    <canvas id="header_canvas"style="position:absolute;bottom:0"></canvas> 
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">

    

    

    

    

    
<link rel="stylesheet" href="/dist/build.css?v=1.14.0.css">

    <script src="/javascripts/bubble.js"></script>
    <script>
        window.isPost = false
        window.aomori = {
            
            
        }
        window.aomori_logo_typed_animated = false
        window.aomori_search_algolia = false

    </script>
<script>
    ((window.gitter = {}).chat = {}).options = {
      room: 'ApocalypseBlog/Apocalypse'
    };
  </script>
  <script src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer></script>
<meta name="generator" content="Hexo 5.3.0"></head>
<!--DaoVoice服务http://blog.daovoice.io/-->

    <script>(function (i, s, o, g, r, a, m) {
        i['DaoVoiceObject'] = r;
        i[r] = i[r] ||
          function () {
            (i[r].q = i[r].q || []).push(arguments);
          };
        i[r].l = 1 * new Date();
        a = s.createElement(o);
        m = s.getElementsByTagName(o)[0];
        a.async = 1;
        a.src = g;
        a.charset = 'utf-8';
        m.parentNode.insertBefore(a, m);
      })(window, document, 'script', ('https:' === document.location.protocol ? 'https:' : 'http:') + "//widget.daovoice.io/widget/b00f5052.js", 'daovoice');
      daovoice('init', {
        app_id: "b00f5052",
      });
      daovoice('update');
    </script>
  
<body>

    <div class="container">
    <header class="header">
        <div class="header-type">
            
            <div class="header-type-inner">
                
                    <a class="header-type-title" href="/">ApocalypseBlog</a>
                
    
                
            </div>
        </div>
        <div class="header-menu">
            <div class="header-menu-inner">
                
            </div>
            <div class="header-menu-social">
                
            </div>
        </div>

        <div class="header-menu-mobile">
            <div class="header-menu-mobile-inner" id="mobile-menu-open">
                <i class="icon icon-menu"></i>
            </div>
        </div>
    </header>

    <div class="header-menu-mobile-menu">
        <div class="header-menu-mobile-menu-bg"></div>
        <div class="header-menu-mobile-menu-wrap">
            <div class="header-menu-mobile-menu-inner">
                <div class="header-menu-mobile-menu-close" id="mobile-menu-close">
                    <i class="icon icon-cross"></i>
                </div>
                <div class="header-menu-mobile-menu-list">
                    
                </div>
            </div>
        </div>
    </div>

</div>

    <div class="container">
        <div class="main">
            <section class="inner">
                <section class="inner-main">
                    <div class="index">
 
  
    
      <article
  id="post-三款很酷很骚气的底部导航"
  class="article article-type-post"
>

  

  <div class="article-inner">
    

    <div class="article-body">
      <header class="article-title">
        <a href="/2020/12/06/%E4%B8%89%E6%AC%BE%E5%BE%88%E9%85%B7%E5%BE%88%E9%AA%9A%E6%B0%94%E7%9A%84%E5%BA%95%E9%83%A8%E5%AF%BC%E8%88%AA/">三款很酷很骚气的底部导航</a>
      </header>
      <div class="article-entry post-inner-html">
        
          <h1 id="三款很酷很骚气的底部导航"><a href="#三款很酷很骚气的底部导航" class="headerlink" title="三款很酷很骚气的底部导航"></a>三款很酷很骚气的底部导航</h1><blockquote>
<p>“</p>
<p>IT 界著名的尼古拉斯·大龙曾说：现在做 Android 开发，已经是大好时机，网上有很多成熟的框架，我们应充分利用好这些，所谓前人种树后人好乘凉，很多时候压根不需要了解太多原理，只需站在巨人的丁丁上即可。</p>
<p>”</p>
</blockquote>
        
      </div>
    </div>

    

  </div>

  <footer class="article-footer">
    <div class="article-more-info">
      <div class="article-date">
  <time datetime="2020-12-06T02:18:21.000Z" itemprop="datePublished">2020-12-06</time>
</div>
      
      
    </div>
  </footer>

</article>

    
  
    
      <article
  id="post-我们要不要上线「个人app」-？"
  class="article article-type-post"
>

  

  <div class="article-inner">
    

    <div class="article-body">
      <header class="article-title">
        <a href="/2020/10/07/%E6%88%91%E4%BB%AC%E8%A6%81%E4%B8%8D%E8%A6%81%E4%B8%8A%E7%BA%BF%E3%80%8C%E4%B8%AA%E4%BA%BAapp%E3%80%8D-%EF%BC%9F/">我们要不要上线「个人app」 ？</a>
      </header>
      <div class="article-entry post-inner-html">
        
          <p>我个人对于新事物抱着总是乐于尝试的态度，可能是小时候能够接触的东西太少。目前情况下，在自己的承受或者精力范围内，会主动去买一些或者做一些东西，更多时候是为了体验一下。我始终认为，很多东西只有亲身去感受，才能深刻的认识到自己对这个东西的见解。</p>
        
      </div>
    </div>

    

  </div>

  <footer class="article-footer">
    <div class="article-more-info">
      <div class="article-date">
  <time datetime="2020-10-06T17:10:49.000Z" itemprop="datePublished">2020-10-07</time>
</div>
      
      
    </div>
  </footer>

</article>

    
  
    
      <article
  id="post-Jetpack-Compose-Alpha-版现已发布！"
  class="article article-type-post"
>

  

  <div class="article-inner">
    

    <div class="article-body">
      <header class="article-title">
        <a href="/2020/09/08/Jetpack-Compose-Alpha-%E7%89%88%E7%8E%B0%E5%B7%B2%E5%8F%91%E5%B8%83%EF%BC%81/">Jetpack Compose Alpha 版现已发布！</a>
      </header>
      <div class="article-entry post-inner-html">
        
          <p><img src="http://mmbiz.qpic.cn/mmbiz_png/rFWVXwibLGtw9y7BgGYN5JAMv0vVBgVAqa2psKsvle7boLicRILqY37F8oQUASndJx3HBMGkRTKmQXZAYmGysgTg/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1" alt="img">Jetpack Compose 是一个现代化的 UI 工具包，旨在帮助开发者通过原生平台 API 简单快捷地在全 Android 平台构建精美应用，它能大幅降低代码量并包含交互式工具，以及使用直观的 Kotlin API，为您的应用增添活力。现在，我们正式发布 Jetpack Compose 的 Alpha 版本，邀请您体验！</p>
        
      </div>
    </div>

    

  </div>

  <footer class="article-footer">
    <div class="article-more-info">
      <div class="article-date">
  <time datetime="2020-09-08T06:31:54.000Z" itemprop="datePublished">2020-09-08</time>
</div>
      
      
    </div>
  </footer>

</article>

    
  
    
      <article
  id="post-Android-10-Q-11-R-分区存储适配"
  class="article article-type-post"
>

  

  <div class="article-inner">
    

    <div class="article-body">
      <header class="article-title">
        <a href="/2020/08/31/Android-10-Q-11-R-%E5%88%86%E5%8C%BA%E5%AD%98%E5%82%A8%E9%80%82%E9%85%8D/">Android 10(Q)/11(R) 分区存储适配</a>
      </header>
      <div class="article-entry post-inner-html">
        
          <p>大部分应用都会请求 ( READ_EXTERNAL_STORAGE ) ( WRITE_EXTERNAL_STORAGE ) 存储权限，来做一些诸如在 SD 卡中存储文件或者读取多媒体文件等常规操作。这些应用可能会在磁盘中存储大量文件，即使应用被卸载了还会依然存在。另外，这些应用还可能会读取其他应用的一些敏感文件数据。</p>
<p>为此，Google 终于下定决心在 Android 10 中引入了分区存储，对权限进行场景的细分，按需索取，并在 Android 11 中进行了进一步的调整。</p>
        
      </div>
    </div>

    

  </div>

  <footer class="article-footer">
    <div class="article-more-info">
      <div class="article-date">
  <time datetime="2020-08-31T09:15:32.000Z" itemprop="datePublished">2020-08-31</time>
</div>
      
      
    </div>
  </footer>

</article>

    
  
    
      <article
  id="post-这15个Android开源库，只有经常逛Github的才知道！"
  class="article article-type-post"
>

  

  <div class="article-inner">
    

    <div class="article-body">
      <header class="article-title">
        <a href="/2020/08/03/%E8%BF%9915%E4%B8%AAAndroid%E5%BC%80%E6%BA%90%E5%BA%93%EF%BC%8C%E5%8F%AA%E6%9C%89%E7%BB%8F%E5%B8%B8%E9%80%9BGithub%E7%9A%84%E6%89%8D%E7%9F%A5%E9%81%93%EF%BC%81/">这15个Android开源库，只有经常逛Github的才知道！</a>
      </header>
      <div class="article-entry post-inner-html">
        
          <h3 id="1-Coil"><a href="#1-Coil" class="headerlink" title="1. Coil"></a>1. Coil</h3><p><img src="http://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9c92c5e5fad0490ab9e0d2364676e2f8~tplv-k3u1fbpfcp-zoom-1.image" alt="img"></p>
<p>Coil是Android上的一个全新的图片加载框架，它的全名叫做<code> coroutine image loader</code>,即协程图片加载库。与传统的图片加载库Glide，Picasso或Fresco等相比。该具有轻量（只有大约1500个方法）、快、易于使用、更现代的API等优势。</p>
        
      </div>
    </div>

    

  </div>

  <footer class="article-footer">
    <div class="article-more-info">
      <div class="article-date">
  <time datetime="2020-08-03T09:15:32.000Z" itemprop="datePublished">2020-08-03</time>
</div>
      
      
    </div>
  </footer>

</article>

    
  
    
      <article
  id="post-Android全新UI编程-Jetpack-Compose-超详细教程-第1弹"
  class="article article-type-post"
>

  

  <div class="article-inner">
    

    <div class="article-body">
      <header class="article-title">
        <a href="/2020/07/27/Android%E5%85%A8%E6%96%B0UI%E7%BC%96%E7%A8%8B-Jetpack-Compose-%E8%B6%85%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B-%E7%AC%AC1%E5%BC%B9/">Android全新UI编程 - Jetpack Compose 超详细教程 第1弹</a>
      </header>
      <div class="article-entry post-inner-html">
        
          <h2 id="1-简介"><a href="#1-简介" class="headerlink" title="1. 简介"></a><strong>1. 简介</strong></h2><p><code>Jetpack Compose</code>是在2019Google i/O大会上发布的新的库。<code>Compose</code>库是用响应式编程的方式对View进行构建,可以用更少更直观的代码，更强大的功能，能提高开发速度（这一段是谷歌自己说的）。 说实话，<code>View/Layout</code>的模式对安卓工程师来说太过于熟悉，对于学习曲线陡峭的<code>Jetpack Compose</code>能不能很好的普及还是有所担心。</p>
        
      </div>
    </div>

    

  </div>

  <footer class="article-footer">
    <div class="article-more-info">
      <div class="article-date">
  <time datetime="2020-07-26T19:45:38.000Z" itemprop="datePublished">2020-07-27</time>
</div>
      
      
    </div>
  </footer>

</article>

    
  
    
      <article
  id="post-Android进阶基础系列：View的工作原理-全面理解！"
  class="article article-type-post"
>

  

  <div class="article-inner">
    

    <div class="article-body">
      <header class="article-title">
        <a href="/2020/07/25/Android%E8%BF%9B%E9%98%B6%E5%9F%BA%E7%A1%80%E7%B3%BB%E5%88%97%EF%BC%9AView%E7%9A%84%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86-%E5%85%A8%E9%9D%A2%E7%90%86%E8%A7%A3%EF%BC%81/">Android进阶基础系列：View的工作原理 全面理解！</a>
      </header>
      <div class="article-entry post-inner-html">
        
          <h1 id="1、ViewRoot-和-DecorView"><a href="#1、ViewRoot-和-DecorView" class="headerlink" title="1、ViewRoot 和 DecorView"></a>1、ViewRoot 和 DecorView</h1><ol>
<li><strong>ViewRoot对应ViewRootImpl类，是连接WindowManager和DecorView的纽带。View的三大流程是通过ViewRoot完成的。</strong> 在ActivityThread中，当Activity对象被创建完毕时，会将DecorView添加到Window中，同时会创建ViewRootImpl，且ViewRootImpl和DecorView会建立关联。如下代码，WindowManagerGlobal的addView()方法：</li>
</ol>
        
      </div>
    </div>

    

  </div>

  <footer class="article-footer">
    <div class="article-more-info">
      <div class="article-date">
  <time datetime="2020-07-25T11:03:07.000Z" itemprop="datePublished">2020-07-25</time>
</div>
      
      
    </div>
  </footer>

</article>

    
  
    
      <article
  id="post-用协程控制多个并行异步结果的优先级"
  class="article article-type-post"
>

  

  <div class="article-inner">
    

    <div class="article-body">
      <header class="article-title">
        <a href="/2020/07/05/%E7%94%A8%E5%8D%8F%E7%A8%8B%E6%8E%A7%E5%88%B6%E5%A4%9A%E4%B8%AA%E5%B9%B6%E8%A1%8C%E5%BC%82%E6%AD%A5%E7%BB%93%E6%9E%9C%E7%9A%84%E4%BC%98%E5%85%88%E7%BA%A7/">用协程控制多个并行异步结果的优先级</a>
      </header>
      <div class="article-entry post-inner-html">
        
          <p>你会怎么实现下面这个场景？应用首页有三个优先级从高到低的弹窗，展示内容依赖网络请求，若低优先级弹窗请求先返回则需等待，让高优先级先展示。</p>
        
      </div>
    </div>

    

  </div>

  <footer class="article-footer">
    <div class="article-more-info">
      <div class="article-date">
  <time datetime="2020-07-05T01:09:27.000Z" itemprop="datePublished">2020-07-05</time>
</div>
      
      
    </div>
  </footer>

</article>

    
  
    
      <article
  id="post-帮朋友转发一个博客"
  class="article article-type-post"
>

  

  <div class="article-inner">
    

    <div class="article-body">
      <header class="article-title">
        <a href="/2020/06/30/%E5%B8%AE%E6%9C%8B%E5%8F%8B%E8%BD%AC%E5%8F%91%E4%B8%80%E4%B8%AA%E5%8D%9A%E5%AE%A2/">帮朋友转发一个博客</a>
      </header>
      <div class="article-entry post-inner-html">
        
          <p><a target="_blank" rel="noopener" href="http://blog.moiyun.cn/archives/15/">http://blog.moiyun.cn/archives/15/</a><br>除非付诸行动，否则空口无凭</p>
<p>博主：刘时俊</p>

        
      </div>
    </div>

    

  </div>

  <footer class="article-footer">
    <div class="article-more-info">
      <div class="article-date">
  <time datetime="2020-06-30T15:51:51.000Z" itemprop="datePublished">2020-06-30</time>
</div>
      
      
    </div>
  </footer>

</article>

    
  
    
      <article
  id="post-聊聊-Android-开发的现状和思考"
  class="article article-type-post"
>

  

  <div class="article-inner">
    

    <div class="article-body">
      <header class="article-title">
        <a href="/2020/06/28/%E8%81%8A%E8%81%8A-Android-%E5%BC%80%E5%8F%91%E7%9A%84%E7%8E%B0%E7%8A%B6%E5%92%8C%E6%80%9D%E8%80%83/">聊聊 Android 开发的现状和思考</a>
      </header>
      <div class="article-entry post-inner-html">
        
          <p>回想这六年里 Android 开发的发展历程，现如今的 Android 已经拥有了成熟的开发体系，技术框架也是经历了一代一代的更新：</p>
<ul>
<li><code>HttpClient</code>、<code>Volley</code> 、<code>OkHttp</code>、<code>Retrofit</code> ；</li>
<li><code>ImageLoader</code>、<code>Picasso</code>、<code>Fresco</code>、<code>Glide</code>；</li>
<li><code>OrmLite</code>、<code>LitePal</code>、<code>GreenDao</code>、<code>Realm</code>、<code>Room</code>；</li>
</ul>
<p>除了熟悉的网络、图片和数据库“三大件”外，还有像 <code>xUtils</code>、<code>EventBus</code>、<code>Dagger</code>、<code>RxJava</code>、<code>MultiType</code> 等等，它们对于老 Android 来说，可以说是贯穿了整个“青春期”的回忆。</p>
        
      </div>
    </div>

    

  </div>

  <footer class="article-footer">
    <div class="article-more-info">
      <div class="article-date">
  <time datetime="2020-06-28T15:51:51.000Z" itemprop="datePublished">2020-06-28</time>
</div>
      
      
    </div>
  </footer>

</article>

    
  

  
    <nav class="pagination">
        <span class="page-number current">1</span><a class="page-number" href="/page/2/">2</a><a class="page-number" href="/page/3/">3</a><a class="page-number" href="/page/4/">4</a><a class="extend next" rel="next" href="/page/2/">Next</a>
    </nav>
  
  
</div>


                </section>
            </section>

             
            <aside class="sidebar">
            
                
            </aside>
        </div>
    </div>

    <footer class="footer">
    <div class="footer-wave">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1440 320"><path fill="#3c4859" fill-opacity="1" d="M0,160L60,181.3C120,203,240,245,360,240C480,235,600,181,720,186.7C840,192,960,256,1080,261.3C1200,267,1320,213,1380,186.7L1440,160L1440,320L1380,320C1320,320,1200,320,1080,320C960,320,840,320,720,320C600,320,480,320,360,320C240,320,120,320,60,320L0,320Z"></path></svg>
    </div>

    <div class="footer-wrap">
        <div class="footer-inner"> 
            ApocalypseBlog &copy; 2021<br>
            Powered By Hexo · Theme By <a href="https://github.com/lh1me/hexo-theme-aomori" target="_blank">Aomori</a>
        </div>
    </div>

</footer>




<script src="/dist/build.js?1.14.0.js"></script>


<script src="/dist/custom.js?1.14.0.js"></script>









</body>

</html>